AWS と定理証明 〜ポリシー言語 Cedar 開発の舞台裏〜
アプリケーションの各開発チーム
似たような判定を各チームで再発明する
実装は別だが概念として一致させる必要がある
実装が別なので統一したチェックが困難
PDP と PEP の両方を併せ持つ一例が Cedar Cedar の定理証明には LEAN が用いられている ただし実装自体は Rust
この考え方めちゃくちゃ目から鱗 radish-miyazaki.icon
実装コードと LEAN の橋渡しする際の参考になる
https://gyazo.com/0d764e79b31831cded4bea7f9a54cfa5
Cedar の設計方針
表現力: 典型的なポリシー設計のユースケースをカバー RBAC: Principle の所属関係に基づく認可 Cedar では Resource もグループ可能
https://gyazo.com/54fbe4ea4a3e381e4868ba07ae8f8e18
in を用いている箇所
Cedar ではユーザが自由に設定可能
https://gyazo.com/0a8abe43bb6ca0c938bc0ec9e4af830e
when 内の条件
評価規則の正しさは LEAN で保証されている
安全性: 許可処理の正確性、ポリシー定義のミス防止 記述言語としての汎用性はバグの温床なのでバリデーションチェックは必須
違反したポリシーは登録時にはじかれる
型システムの正しさは LEAN で保証されている
応答速度: ポリシー数に対してパフォーマンス劣化が起きづらい Cedar では 以下のような Slice によるパフォーマンス改善
判定に関わる (Principal, Resource) の組をキーとする辞書データを保持しており、それを基にリクエストに対して無関係なポリシーは除外する
ポリシーに無関係なエンティティを除外する
フィールドが辿る必要のある深さをあらかじめ調べる
特にエンティティ数に対して速度劣化が起きづらい
https://gyazo.com/9efb392f8824011a7dbd7b1e0c155630
最適化の正しさは LEAN を用いて保証されている
allow / deny とは別にポリシー自体の性質をチェックする
e.g. あるポリシー P1 と別のポリシー P2 は等価か、ポリシー P1 は デッドコード か ... ポリシーを SMT ソルバが認識できる形式に変換(エンコーディング)する
e.g. 「2 つのポリシーが異なる結果を返す」ことが SAT(充足可能性)である場合、2 つのポリシーは不等価 SMT ソルバとか SAT について この記事 参考(本発表と同じ方の登壇記事) エンコードの正しさは LEAN で保証されている